// 基础配置
import { resolve } from 'path'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from 'unplugin-vue-components/resolvers'
import pxToVw from 'postcss-px-to-viewport-8-plugin'
import { visualizer } from 'rollup-plugin-visualizer'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
/* import OptimizationPersist from 'vite-plugin-optimize-persist'
import PkgConfig from 'vite-plugin-package-config' */

// https://vitejs.dev/config/
export default defineConfig({
  base: '/',
  resolve: {
    alias: {
      '@': resolve(process.cwd(), 'src')
    }
  },
  css: {
    // css预处理器
    postcss: {
      plugins: [
        pxToVw({
          unitToConvert: 'px', // 需要转换的单位，默认为"px"
          viewportWidth: 375, // 视窗的宽度，对应的是我们设计稿的宽度，一般是750
          // viewportHeight: 667, // 视窗的高度，根据750设备的宽度来指定，一般指定1334，也可以不配置
          unitPrecision: 5, // 指定`px`转换为视窗单位值的小数位数
          viewportUnit: 'vw', // 指定需要转换成的视窗单位，建议使用vw
          fontViewportUnit: 'vw', // 字体使用的视口单位
          selectorBlackList: ['.ignore'], // 指定不转换为视窗单位的类，可以自定义，可以无限添加,建议定义一至两个通用的类名
          minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位，你也可以设置为你想要的值
          mediaQuery: false, // 允许在媒体查询中转换`px`
          replace: true, // 是否直接更换属性值，而不添加备用属性
          landscape: false // 是否处理横屏情况
        })
      ]
    },
    preprocessorOptions: {
      scss: {
        additionalData: '@import "@/assets/scss/index.scss";'
      }
    }
  },
  plugins: [
    vue(),
    Components({
      resolvers: [VantResolver()]
    }),
    visualizer({
      filename: './node_modules/.cache/visualizer/stats.html',
      open: true,
      gzipSize: true,
      brotliSize: true
    }),
    createSvgIconsPlugin({
      // 指定需要缓存的图标文件夹
      iconDirs: [resolve(process.cwd(), 'src/assets/icons')],
      // 指定symbolId格式
      symbolId: 'icon-[dir]-[name]'
    }),
    // 自动生成 预打包
    /* PkgConfig(),
    OptimizationPersist(), */
    vueSetupExtend()
  ],
  build: {
    minify: 'terser',
    outDir: 'dist/', // 打包文件存放路径
    assetsDir: 'static',
    chunkSizeWarningLimit: 1000, // 打包文件警告值
    terserOptions: {
      // 关闭生产环境console debugger
      compress: {
        drop_console: true,
        drop_debugger: true
      }
    },
    rollupOptions: {
      output: {
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/name-[hash].[ext]'
      }
    }
  },
  define: {
    'process.env': {}
  }
})
